﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Transactions;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class PessoaAtestado
    {
        #region Variaveis Membro
        private int _idAtestado;
        private int _idPessoa;
        private bool _isGerouAfastamento;
        private TipoAtestado _tipoAtestado;
        private DateTime? _periodoInicial;
        private DateTime? _periodoFinal;
        private string _observacoes;
        private string _path;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdAtestado
        {
            get { return _idAtestado; }
            set { _idAtestado = value; }
        }
        public int IdPessoa
        {
            get { return _idPessoa; }
            set { _idPessoa = value; }
        }
        public bool IsGerouAfastamento
        {
            get { return _isGerouAfastamento; }
            set { _isGerouAfastamento = value; }
        }
        public string GerouAfastamento
        {
            get { return (_isGerouAfastamento) ? "Sim" : "Não"; }
        }
        public TipoAtestado TipoAtestado
        {
            get { return _tipoAtestado; }
            set { _tipoAtestado = value; }
        }
        public DateTime? PeriodoInicial
        {
            get { return _periodoInicial; }
            set { _periodoInicial = value; }
        }
        public DateTime? PeriodoFinal
        {
            get { return _periodoFinal; }
            set { _periodoFinal = value; }
        }
        public string Path
        {
            get { return _path; }
            set { _path = value; }
        }
        public string Observacoes
        {
            get { return _observacoes; }
            set { _observacoes = value; }
        }
        #endregion

        #region Contrutores
        public PessoaAtestado()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public PessoaAtestado(int idAtestado)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idAtestado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        private void Carregar(int idAtestado)
        {
            try
            {
                var consulta = from atest in _context.tab_pessoa_atestado
                               where atest.id_atestado == idAtestado
                               select new
                               {
                                   atest.id_atestado,
                                   atest.tab_pessoa.Id_pessoa,
                                   gerou_afastamento = atest.g_afastamento,
                                   atest.periodo_inicial,
                                   atest.periodo_final,
                                   atest.path,
                                   atest.tab_tipo_atestado.id_tipo_atestado,
                                   atest.obs
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this.IdAtestado = list.id_atestado;
                    this.IdPessoa = list.Id_pessoa;
                    this.IsGerouAfastamento = (list.gerou_afastamento == "S") ? true : false;
                    this.PeriodoInicial = list.periodo_inicial;
                    this.PeriodoFinal = list.periodo_final;
                    this.Path = list.path;
                    this.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
                    this.Observacoes = list.obs;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected void RecuperaId()
        {
            try
            {
                var consulta = from atest in _context.tab_pessoa_atestado
                               where atest.tab_pessoa.Id_pessoa == this.IdPessoa
                               && atest.tab_tipo_atestado.id_tipo_atestado == this.TipoAtestado.IdTipoAtestado
                               && atest.periodo_inicial == this.PeriodoInicial
                               && atest.periodo_final == this.PeriodoFinal
                               orderby atest.id_atestado descending
                               select atest;

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this.IdAtestado = list.id_atestado;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos

        #region Metodos de Selecao
        public List<PessoaAtestado> SelectAll()
        {
            try
            {
                List<PessoaAtestado> atestados = new List<PessoaAtestado>();


                var consulta = from atest in _context.tab_pessoa_atestado
                               where atest.tab_tipo_atestado.id_tipo_atestado != 15
                               && atest.tab_tipo_atestado.id_tipo_atestado != 16
                               select new
                               {
                                   atest.id_atestado,
                                   atest.tab_pessoa.Id_pessoa,
                                   gerou_afastamento = atest.g_afastamento,
                                   atest.periodo_inicial,
                                   atest.periodo_final,
                                   atest.path,
                                   atest.tab_tipo_atestado.id_tipo_atestado,
                                   atest.obs
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    PessoaAtestado atestado = new PessoaAtestado();
                    atestado.IdAtestado = list.id_atestado;
                    atestado.IdPessoa = list.Id_pessoa;
                    atestado.IsGerouAfastamento = (list.gerou_afastamento == "S") ? true : false;
                    atestado.PeriodoInicial = list.periodo_inicial;
                    atestado.PeriodoFinal = list.periodo_final;
                    atestado.Path = list.path;
                    atestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
                    atestado.Observacoes = list.obs;

                    atestados.Add(atestado);
                }

                return atestados;
            }
            catch (Exception ex)
            {                
                throw ex;
            }
        }
        public List<PessoaAtestado> SelectPor(int idPessoa)
        {
            try
            {
                List<PessoaAtestado> atestados = new List<PessoaAtestado>();

                var consulta = from atest in _context.tab_pessoa_atestado
                               where atest.tab_pessoa.Id_pessoa == idPessoa
                               && atest.tab_tipo_atestado.id_tipo_atestado != 15
                               && atest.tab_tipo_atestado.id_tipo_atestado != 16
                               select new
                               {
                                   atest.id_atestado,
                                   atest.tab_pessoa.Id_pessoa,
                                   gerou_afastamento = atest.g_afastamento,
                                   atest.periodo_inicial,
                                   atest.periodo_final,
                                   atest.path,
                                   atest.tab_tipo_atestado.id_tipo_atestado,
                                   atest.obs
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    PessoaAtestado atestado = new PessoaAtestado();
                    atestado.IdAtestado = list.id_atestado;
                    atestado.IdPessoa = list.Id_pessoa;
                    atestado.IsGerouAfastamento = (list.gerou_afastamento == "S") ? true : false;
                    atestado.PeriodoInicial = list.periodo_inicial;
                    atestado.PeriodoFinal = list.periodo_final;
                    atestado.Path = list.path;
                    atestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
                    atestado.Observacoes = list.obs;

                    atestados.Add(atestado);
                }

                return atestados;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos de Persistencia
        public void Salvar()
        {
            try
            {
                if (this.IdAtestado == 0)
                {
                    tab_pessoa_atestado tabAtestado = new tab_pessoa_atestado();
                    tabAtestado.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this.IdPessoa);
                    tabAtestado.tab_tipo_atestadoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_atestado", "id_tipo_atestado", this.TipoAtestado.IdTipoAtestado);
                    tabAtestado.g_afastamento = (this.IsGerouAfastamento) ? "S" : "N";
                    tabAtestado.periodo_inicial = this.PeriodoInicial;
                    tabAtestado.periodo_final = this.PeriodoFinal;
                    tabAtestado.obs = this.Observacoes;

                    _context.AddTotab_pessoa_atestado(tabAtestado);
                    _context.SaveChanges();

                    RecuperaId();
                }
                else
                {
                    tab_pessoa_atestado tabAtestado = (from atest in _context.tab_pessoa_atestado
                                                       where atest.id_atestado == this.IdAtestado
                                                       select atest).First();

                    tabAtestado.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this.IdPessoa);
                    tabAtestado.tab_tipo_atestadoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_atestado", "id_tipo_atestado", this.TipoAtestado.IdTipoAtestado);
                    tabAtestado.g_afastamento = (this.IsGerouAfastamento) ? "S" : "N";
                    tabAtestado.periodo_inicial = this.PeriodoInicial;
                    tabAtestado.periodo_final = this.PeriodoFinal;
                    tabAtestado.obs = this.Observacoes;

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void AtualizaPath()
        {
            try
            {
                if (this.IdAtestado != 0)
                {
                    tab_pessoa_atestado tabAtestado = (from atest in _context.tab_pessoa_atestado
                                                       where atest.id_atestado == this.IdAtestado
                                                       select atest).First();

                    tabAtestado.path = this.Path;

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void Excluir()
        {
            try
            {
                if (this.IdAtestado != 0)
                {
                    tab_pessoa_atestado tabAtestado = (from atest in _context.tab_pessoa_atestado
                                                       where atest.id_atestado == this.IdAtestado
                                                       || atest.tab_pessoa_atestado2.id_atestado == this.IdAtestado
                                                       select atest).First();

                    _context.DeleteObject(tabAtestado);
                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #endregion

        //#region Construtores
        //public PessoaAtestado()
        //{
        //    _context = new GENTEEntities();
        //}

        //public PessoaAtestado(int pIdAtestado)
        //{
        //    _context = new GENTEEntities();
        //    Carregar(pIdAtestado);
        //}
        //#endregion

        //#region Metodos Privados
        //private void Carregar(int pIdAtestado)
        //{

        //    var consulta = from pessoaatestado in _context.tab_pessoa_atestado
        //                   where pessoaatestado.id_atestado == pIdAtestado
        //                   select new
        //                   {
        //                       pessoaatestado.id_atestado,
        //                       //pessoaatestado.tab_pessoa_CID10.id_cid,
        //                       pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //                       pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //                       pessoaatestado.dt_emissao,
        //                       pessoaatestado.dt_acidente,
        //                       pessoaatestado.periodo_inicial,
        //                       pessoaatestado.periodo_final,
        //                       pessoaatestado.local,
        //                       pessoaatestado.tab_pessoa.Id_pessoa,
        //                       pessoaatestado.path,
        //                       pessoaatestado.obs,
        //                       pessoaatestado.inserida_por
        //                   };

        //    var listConsulta = consulta.ToList();

        //    foreach (var list in listConsulta)
        //    {
        //        this._idAtestado = list.id_atestado;
        //        //this._pessoaCID10 = new PessoaCID10(list.id_cid);
        //        this._tipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //        this._tipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //        this._dtEmissao = list.dt_emissao;
        //        this._dtAcidente = list.dt_acidente;
        //        this._periodoInicial = list.periodo_inicial;
        //        this._periodoFinal = list.periodo_final;
        //        this._local = list.local;
        //        this._pessoa = new Pessoa(list.Id_pessoa);
        //        this._path = list.path;
        //        this._obs = list.obs;
        //        this._inseridaPor = list.inserida_por;
        //    }
        //}
        
        //private int[] ObterCodigosSelecao(List<TipoAtestado> pTipoAtestado)
        //{
        //    int[] _codigos = new int[pTipoAtestado.Count];
        //    int _cont = 0;

        //    foreach (TipoAtestado item in pTipoAtestado)
        //    {
        //        _codigos[_cont] = item.IdTipoAtestado;
        //        _cont++;
        //    }

        //    return _codigos;
        //}

        //private static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values)
        //{
        //    if (null == valueSelector)
        //    {
        //        throw new
        //            ArgumentNullException("valueSelector");
        //    }
        //    if (null == values) { throw new ArgumentNullException("values"); }

        //    ParameterExpression p = valueSelector.Parameters.Single();
        //    if (!values.Any())
        //    {
        //        return e => false;
        //    }

        //    var equals = values.Select(value =>
        //    (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value,
        //    typeof(TValue))));
        //    var body = equals.Aggregate<Expression>((accumulate, equal) =>
        //    Expression.Or(accumulate, equal));
        //    return Expression.Lambda<Func<TElement, bool>>(body, p);
        //}
        //#endregion

        //#region Metodos Publicos
        //public int RetornaQtdeDocumentos(int pIdPessoa, int pIdTipoAtestado)
        //{
        //    try
        //    {
        //        int _resultado = 0;

        //        var consulta = from pessoaatestado in _context.tab_pessoa_atestado
        //                       where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //                       && pessoaatestado.tab_tipo_atestado.id_tipo_atestado == pIdTipoAtestado
        //                       select new
        //                       {
        //                           pessoaatestado.id_atestado
        //                       };

        //        //var consulta = (from pessoadocpadrao in _context.tab_pessoa_documento_padrao
        //        //                where (pessoadocpadrao.tab_pessoa.Id_pessoa == pIdPessoa)
        //        //                && (pessoadocpadrao.tab_tipo_documento_pessoa.id_tipo_documento_pessoa == _tipodocto)
        //        //                select pessoadocpadrao);

        //        _resultado = consulta.ToList().Count;

        //        return _resultado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(int pIdPessoa)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        var consulta = from pessoaatestado in _context.tab_pessoa_atestado
        //                       where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //                       select new
        //                       {
        //                           pessoaatestado.id_atestado,
        //                           //pessoaatestado.tab_pessoa_CID10.id_cid,
        //                           pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //                           pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //                           pessoaatestado.dt_emissao,
        //                           pessoaatestado.dt_acidente,
        //                           pessoaatestado.periodo_inicial,
        //                           pessoaatestado.periodo_final,
        //                           pessoaatestado.local,
        //                           pessoaatestado.tab_pessoa.Id_pessoa,
        //                           pessoaatestado.path,
        //                           pessoaatestado.obs,
        //                           pessoaatestado.inserida_por
        //                       };

        //        var listConsulta = consulta.ToList();

        //        foreach (var list in listConsulta)
        //        {
        //            PessoaAtestado pessoaatestado = new PessoaAtestado();
        //            pessoaatestado.IdAtestado = list.id_atestado;
        //            //pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //            pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //            pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //            pessoaatestado.DtEmissao = list.dt_emissao;
        //            pessoaatestado.DtAcidente = list.dt_acidente;
        //            pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //            pessoaatestado.PeriodoFinal = list.periodo_final;
        //            pessoaatestado.Local = list.local;
        //            pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //            pessoaatestado.Path = list.path;
        //            pessoaatestado.Obs = list.obs;
        //            pessoaatestado.InseridaPor = list.inserida_por;

        //            listPessoaAtestado.Add(pessoaatestado);
        //        }

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(Int64 pIdAtestado)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        var consulta = from pessoaatestado in _context.tab_pessoa_atestado
        //                       where pessoaatestado.id_atestado == pIdAtestado
        //                       select new
        //                       {
        //                           pessoaatestado.id_atestado,
        //                           //pessoaatestado.tab_pessoa_CID10.id_cid,
        //                           pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //                           pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //                           pessoaatestado.dt_emissao,
        //                           pessoaatestado.dt_acidente,
        //                           pessoaatestado.periodo_inicial,
        //                           pessoaatestado.periodo_final,
        //                           pessoaatestado.local,
        //                           pessoaatestado.tab_pessoa.Id_pessoa,
        //                           pessoaatestado.path,
        //                           pessoaatestado.obs,
        //                           pessoaatestado.inserida_por
        //                       };

        //        var listConsulta = consulta.ToList();

        //        foreach (var list in listConsulta)
        //        {
        //            PessoaAtestado pessoaatestado = new PessoaAtestado();
        //            pessoaatestado.IdAtestado = list.id_atestado;
        //            //pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //            pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //            pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //            pessoaatestado.DtEmissao = list.dt_emissao;
        //            pessoaatestado.DtAcidente = list.dt_acidente;
        //            pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //            pessoaatestado.PeriodoFinal = list.periodo_final;
        //            pessoaatestado.Local = list.local;
        //            pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //            pessoaatestado.Path = list.path;
        //            pessoaatestado.Obs = list.obs;
        //            pessoaatestado.InseridaPor = list.inserida_por;

        //            listPessoaAtestado.Add(pessoaatestado);
        //        }

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(int pIdContrato, List<TipoAtestado> pTiposAtestado)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        int[] _codTipoAtestadoSelecao = ObterCodigosSelecao(pTiposAtestado);

        //        var consulta = from pessoaatestado in _context.tab_pessoa_atestado
        //                       join tipoatestado in _context.tab_tipo_atestado.Where((BuildContainsExpression<tab_tipo_atestado, int>(item => item.id_tipo_atestado, _codTipoAtestadoSelecao))) on pessoaatestado.tab_tipo_atestado.id_tipo_atestado equals tipoatestado.id_tipo_atestado
        //                       join pessoa in _context.tab_pessoa on pessoaatestado.tab_pessoa.Id_pessoa equals pessoa.Id_pessoa
        //                       join contratopessoa in _context.tab_contrato_pessoa on pessoa.Id_pessoa equals contratopessoa.tab_pessoa.Id_pessoa
        //                       where pessoaatestado.periodo_inicial >= this._periodoInicial && pessoaatestado.periodo_inicial <= this._periodoFinal
        //                       && pessoaatestado.periodo_final >= this._periodoInicial && pessoaatestado.periodo_final <= this._periodoFinal
        //                       && contratopessoa.tab_contrato.Id_contrato == pIdContrato
        //                       select new
        //                       {
        //                           pessoaatestado.id_atestado,
        //                           //pessoaatestado.tab_pessoa_CID10.id_cid,
        //                           pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //                           pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //                           pessoaatestado.dt_emissao,
        //                           pessoaatestado.dt_acidente,
        //                           pessoaatestado.periodo_inicial,
        //                           pessoaatestado.periodo_final,
        //                           pessoaatestado.local,
        //                           pessoaatestado.tab_pessoa.Id_pessoa,
        //                           pessoaatestado.path,
        //                           pessoaatestado.obs,
        //                           pessoaatestado.inserida_por
        //                       };

        //        var listConsulta = consulta.ToList();

        //        foreach (var list in listConsulta)
        //        {
        //            PessoaAtestado pessoaatestado = new PessoaAtestado();
        //            pessoaatestado.IdAtestado = list.id_atestado;
        //            //pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //            pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //            pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //            pessoaatestado.DtEmissao = list.dt_emissao;
        //            pessoaatestado.DtAcidente = list.dt_acidente;
        //            pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //            pessoaatestado.PeriodoFinal = list.periodo_final;
        //            pessoaatestado.Local = list.local;
        //            pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //            pessoaatestado.Path = list.path;
        //            pessoaatestado.Obs = list.obs;
        //            pessoaatestado.InseridaPor = list.inserida_por;

        //            listPessoaAtestado.Add(pessoaatestado);
        //        }

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(int pIdPessoa, bool pSomenteCAT)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        var consulta = from pessoaatestado in _context.tab_pessoa_atestado
        //                       where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //                       && ((!pSomenteCAT) ? pessoaatestado.tab_tipo_atestado.id_tipo_atestado != 15 : pessoaatestado.tab_tipo_atestado.id_tipo_atestado == 15)
        //                       select new
        //                       {
        //                           pessoaatestado.id_atestado,
        //                           //pessoaatestado.tab_pessoa_CID10.id_cid,
        //                           pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //                           pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //                           pessoaatestado.dt_emissao,
        //                           pessoaatestado.dt_acidente,
        //                           pessoaatestado.periodo_inicial,
        //                           pessoaatestado.periodo_final,
        //                           pessoaatestado.local,
        //                           pessoaatestado.tab_pessoa.Id_pessoa,
        //                           pessoaatestado.path,
        //                           pessoaatestado.obs,
        //                           pessoaatestado.inserida_por
        //                       };

        //        var listConsulta = consulta.ToList();

        //        foreach (var list in listConsulta)
        //        {
        //            PessoaAtestado pessoaatestado = new PessoaAtestado();
        //            pessoaatestado.IdAtestado = list.id_atestado;
        //            //pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //            pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //            pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //            pessoaatestado.DtEmissao = list.dt_emissao;
        //            pessoaatestado.DtAcidente = list.dt_acidente;
        //            pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //            pessoaatestado.PeriodoFinal = list.periodo_final;
        //            pessoaatestado.Local = list.local;
        //            pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //            pessoaatestado.Path = list.path;
        //            pessoaatestado.Obs = list.obs;
        //            pessoaatestado.InseridaPor = list.inserida_por;

        //            listPessoaAtestado.Add(pessoaatestado);
        //        }

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(int pIdPessoa, bool pSomenteCAT, bool pAtestadosExistentes)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        if (!pSomenteCAT)
        //        {
        //            var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //                                    //join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado1.id_atestado
        //                                    where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //                                    select pessoaatestado;

        //            var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //                           where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //                           && pessoaatestado.tab_tipo_atestado.id_tipo_atestado != 15
        //                           select new
        //                           {
        //                               pessoaatestado.id_atestado,
        //                               //pessoaatestado.tab_pessoa_CID10.id_cid,
        //                               pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //                               pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //                               pessoaatestado.dt_emissao,
        //                               pessoaatestado.dt_acidente,
        //                               pessoaatestado.periodo_inicial,
        //                               pessoaatestado.periodo_final,
        //                               pessoaatestado.local,
        //                               pessoaatestado.tab_pessoa.Id_pessoa,
        //                               pessoaatestado.path,
        //                               pessoaatestado.obs,
        //                               pessoaatestado.inserida_por
        //                           };

        //            var listConsulta = consulta.ToList();

        //            foreach (var list in listConsulta)
        //            {
        //                PessoaAtestado pessoaatestado = new PessoaAtestado();
        //                pessoaatestado.IdAtestado = list.id_atestado;
        //                //pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //                pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //                pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //                pessoaatestado.DtEmissao = list.dt_emissao;
        //                pessoaatestado.DtAcidente = list.dt_acidente;
        //                pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //                pessoaatestado.PeriodoFinal = list.periodo_final;
        //                pessoaatestado.Local = list.local;
        //                pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //                pessoaatestado.Path = list.path;
        //                pessoaatestado.Obs = list.obs;
        //                pessoaatestado.InseridaPor = list.inserida_por;

        //                listPessoaAtestado.Add(pessoaatestado);
        //            }
        //        }
        //        else
        //        {
        //            var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //                                    //join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado.id_atestado
        //                                    where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //                                    select pessoaatestado;

        //            var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //                           where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //                           && pessoaatestado.tab_tipo_atestado.id_tipo_atestado == 15
        //                           select new
        //                           {
        //                               pessoaatestado.id_atestado,
        //                               //pessoaatestado.tab_pessoa_CID10.id_cid,
        //                               pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //                               pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //                               pessoaatestado.dt_emissao,
        //                               pessoaatestado.dt_acidente,
        //                               pessoaatestado.periodo_inicial,
        //                               pessoaatestado.periodo_final,
        //                               pessoaatestado.local,
        //                               pessoaatestado.tab_pessoa.Id_pessoa,
        //                               pessoaatestado.path,
        //                               pessoaatestado.obs,
        //                               pessoaatestado.inserida_por
        //                           };

        //            var listConsulta = consulta.ToList();

        //            foreach (var list in listConsulta)
        //            {
        //                PessoaAtestado pessoaatestado = new PessoaAtestado();
        //                pessoaatestado.IdAtestado = list.id_atestado;
        //                //pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //                pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //                pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //                pessoaatestado.DtEmissao = list.dt_emissao;
        //                pessoaatestado.DtAcidente = list.dt_acidente;
        //                pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //                pessoaatestado.PeriodoFinal = list.periodo_final;
        //                pessoaatestado.Local = list.local;
        //                pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //                pessoaatestado.Path = list.path;
        //                pessoaatestado.Obs = list.obs;
        //                pessoaatestado.InseridaPor = list.inserida_por;

        //                listPessoaAtestado.Add(pessoaatestado);
        //            }
        //        }

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(int pIdPessoa, bool pSomenteCAT, bool pAtestadosExistentes, int pIdAtestado)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        //if (!pSomenteCAT)
        //        //{
        //        //    var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //        //                            //join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado.id_atestado
        //        //                            where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                            && pessoaatestado.id_atestado == pIdAtestado
        //        //                            select pessoaatestadoCAT.tab_pessoa_atestado1;

        //        //    var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //        //                   where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                   && pessoaatestado.tab_tipo_atestado.id_tipo_atestado != 15
        //        //                   select new
        //        //                   {
        //        //                       pessoaatestado.id_atestado,
        //        //                       //pessoaatestado.tab_pessoa_CID10.id_cid,
        //        //                       pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //        //                       pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //        //                       pessoaatestado.dt_emissao,
        //        //                       pessoaatestado.dt_acidente,
        //        //                       pessoaatestado.periodo_inicial,
        //        //                       pessoaatestado.periodo_final,
        //        //                       pessoaatestado.local,
        //        //                       pessoaatestado.tab_pessoa.Id_pessoa,
        //        //                       pessoaatestado.path,
        //        //                       pessoaatestado.obs,
        //        //                       pessoaatestado.inserida_por
        //        //                   };

        //        //    var listConsulta = consulta.ToList();

        //        //    foreach (var list in listConsulta)
        //        //    {
        //        //        PessoaAtestado pessoaatestado = new PessoaAtestado();
        //        //        pessoaatestado.IdAtestado = list.id_atestado;
        //        //        pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //        //        pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //        //        pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //        //        pessoaatestado.DtEmissao = list.dt_emissao;
        //        //        pessoaatestado.DtAcidente = list.dt_acidente;
        //        //        pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //        //        pessoaatestado.PeriodoFinal = list.periodo_final;
        //        //        pessoaatestado.Local = list.local;
        //        //        pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //        //        pessoaatestado.Path = list.path;
        //        //        pessoaatestado.Obs = list.obs;
        //        //        pessoaatestado.InseridaPor = list.inserida_por;

        //        //        listPessoaAtestado.Add(pessoaatestado);
        //        //    }
        //        //}
        //        //else
        //        //{
        //        //    var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //        //                            //join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado1.id_atestado
        //        //                            where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                            && pessoaatestado.id_atestado == pIdAtestado
        //        //                            //select pessoaatestadoCAT.tab_pessoa_atestado;

        //        //    var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //        //                   where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                   && pessoaatestado.tab_tipo_atestado.id_tipo_atestado == 15
        //        //                   select new
        //        //                   {
        //        //                       pessoaatestado.id_atestado,
        //        //                       pessoaatestado.tab_pessoa_CID10.id_cid,
        //        //                       pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //        //                       pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //        //                       pessoaatestado.dt_emissao,
        //        //                       pessoaatestado.dt_acidente,
        //        //                       pessoaatestado.periodo_inicial,
        //        //                       pessoaatestado.periodo_final,
        //        //                       pessoaatestado.local,
        //        //                       pessoaatestado.tab_pessoa.Id_pessoa,
        //        //                       pessoaatestado.path,
        //        //                       pessoaatestado.obs,
        //        //                       pessoaatestado.inserida_por
        //        //                   };

        //        //    var listConsulta = consulta.ToList();

        //        //    foreach (var list in listConsulta)
        //        //    {
        //        //        PessoaAtestado pessoaatestado = new PessoaAtestado();
        //        //        pessoaatestado.IdAtestado = list.id_atestado;
        //        //        pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //        //        pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //        //        pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //        //        pessoaatestado.DtEmissao = list.dt_emissao;
        //        //        pessoaatestado.DtAcidente = list.dt_acidente;
        //        //        pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //        //        pessoaatestado.PeriodoFinal = list.periodo_final;
        //        //        pessoaatestado.Local = list.local;
        //        //        pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //        //        pessoaatestado.Path = list.path;
        //        //        pessoaatestado.Obs = list.obs;
        //        //        pessoaatestado.InseridaPor = list.inserida_por;

        //        //        listPessoaAtestado.Add(pessoaatestado);
        //        //    }
        //        //}

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(int pIdPessoa, bool pSomenteCAT, bool pAtestadosExistentes, bool pSomenteAtestAcidentesTrabalho)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        //if (!pSomenteCAT)
        //        //{
        //        //    var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //        //                            //join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado.id_atestado
        //        //                            where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                            select pessoaatestadoCAT.tab_pessoa_atestado1;

        //        //    var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //        //                   where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                   && (!pSomenteAtestAcidentesTrabalho) ? pessoaatestado.tab_tipo_atestado.id_tipo_atestado != 15 : pessoaatestado.tab_tipo_atestado.id_tipo_atestado == 2
        //        //                   select new
        //        //                   {
        //        //                       pessoaatestado.id_atestado,
        //        //                       //pessoaatestado.tab_pessoa_CID10.id_cid,
        //        //                       //pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //        //                       pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //        //                       pessoaatestado.dt_emissao,
        //        //                       pessoaatestado.dt_acidente,
        //        //                       pessoaatestado.periodo_inicial,
        //        //                       pessoaatestado.periodo_final,
        //        //                       pessoaatestado.local,
        //        //                       pessoaatestado.tab_pessoa.Id_pessoa,
        //        //                       pessoaatestado.path,
        //        //                       pessoaatestado.obs,
        //        //                       pessoaatestado.inserida_por
        //        //                   };

        //        //    var listConsulta = consulta.ToList();

        //        //    foreach (var list in listConsulta)
        //        //    {
        //        //        // tratamento temporário
        //        //        if (list.Id_pessoa == pIdPessoa)
        //        //        {
        //        //            PessoaAtestado pessoaatestado = new PessoaAtestado();
        //        //            pessoaatestado.IdAtestado = list.id_atestado;
        //        //            pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //        //            pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //        //            pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //        //            pessoaatestado.DtEmissao = list.dt_emissao;
        //        //            pessoaatestado.DtAcidente = list.dt_acidente;
        //        //            pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //        //            pessoaatestado.PeriodoFinal = list.periodo_final;
        //        //            pessoaatestado.Local = list.local;
        //        //            pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //        //            pessoaatestado.Path = list.path;
        //        //            pessoaatestado.Obs = list.obs;
        //        //            pessoaatestado.InseridaPor = list.inserida_por;

        //        //            listPessoaAtestado.Add(pessoaatestado);
        //        //        }
        //        //    }
        //        //}
        //        //else
        //        //{
        //        //    var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //        //                            join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado1.id_atestado
        //        //                            where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                            select pessoaatestadoCAT.tab_pessoa_atestado;

        //        //    var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //        //                   where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                   && pessoaatestado.tab_tipo_atestado.id_tipo_atestado == 15
        //        //                   select new
        //        //                   {
        //        //                       pessoaatestado.id_atestado,
        //        //                       pessoaatestado.tab_pessoa_CID10.id_cid,
        //        //                       pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //        //                       pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //        //                       pessoaatestado.dt_emissao,
        //        //                       pessoaatestado.dt_acidente,
        //        //                       pessoaatestado.periodo_inicial,
        //        //                       pessoaatestado.periodo_final,
        //        //                       pessoaatestado.local,
        //        //                       pessoaatestado.tab_pessoa.Id_pessoa,
        //        //                       pessoaatestado.path,
        //        //                       pessoaatestado.obs,
        //        //                       pessoaatestado.inserida_por
        //        //                   };

        //        //    var listConsulta = consulta.ToList();

        //        //    foreach (var list in listConsulta)
        //        //    {
        //        //        PessoaAtestado pessoaatestado = new PessoaAtestado();
        //        //        pessoaatestado.IdAtestado = list.id_atestado;
        //        //        pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //        //        pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //        //        pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //        //        pessoaatestado.DtEmissao = list.dt_emissao;
        //        //        pessoaatestado.DtAcidente = list.dt_acidente;
        //        //        pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //        //        pessoaatestado.PeriodoFinal = list.periodo_final;
        //        //        pessoaatestado.Local = list.local;
        //        //        pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //        //        pessoaatestado.Path = list.path;
        //        //        pessoaatestado.Obs = list.obs;
        //        //        pessoaatestado.InseridaPor = list.inserida_por;

        //        //        listPessoaAtestado.Add(pessoaatestado);
        //        //    }
        //        //}

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public List<PessoaAtestado> SelecionarAtestados(int pIdPessoa, bool pSomenteCAT, bool pAtestadosExistentes, int pIdAtestado, bool pSomenteAtestAcidentesTrabalho)
        //{
        //    try
        //    {
        //        List<PessoaAtestado> listPessoaAtestado = new List<PessoaAtestado>();

        //        //if (!pSomenteCAT)
        //        //{
        //        //    var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //        //                            join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado.id_atestado
        //        //                            where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                            && pessoaatestado.id_atestado == pIdAtestado
        //        //                            select pessoaatestadoCAT.tab_pessoa_atestado1;

        //        //    var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //        //                   where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                   && (!pSomenteAtestAcidentesTrabalho) ? pessoaatestado.tab_tipo_atestado.id_tipo_atestado != 15 : pessoaatestado.tab_tipo_atestado.id_tipo_atestado == 2
        //        //                   select new
        //        //                   {
        //        //                       pessoaatestado.id_atestado,
        //        //                       pessoaatestado.tab_pessoa_CID10.id_cid,
        //        //                       pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //        //                       pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //        //                       pessoaatestado.dt_emissao,
        //        //                       pessoaatestado.dt_acidente,
        //        //                       pessoaatestado.periodo_inicial,
        //        //                       pessoaatestado.periodo_final,
        //        //                       pessoaatestado.local,
        //        //                       pessoaatestado.tab_pessoa.Id_pessoa,
        //        //                       pessoaatestado.path,
        //        //                       pessoaatestado.obs,
        //        //                       pessoaatestado.inserida_por
        //        //                   };

        //        //    var listConsulta = consulta.ToList();

        //        //    foreach (var list in listConsulta)
        //        //    {
        //        //        PessoaAtestado pessoaatestado = new PessoaAtestado();
        //        //        pessoaatestado.IdAtestado = list.id_atestado;
        //        //        pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //        //        pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //        //        pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //        //        pessoaatestado.DtEmissao = list.dt_emissao;
        //        //        pessoaatestado.DtAcidente = list.dt_acidente;
        //        //        pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //        //        pessoaatestado.PeriodoFinal = list.periodo_final;
        //        //        pessoaatestado.Local = list.local;
        //        //        pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //        //        pessoaatestado.Path = list.path;
        //        //        pessoaatestado.Obs = list.obs;
        //        //        pessoaatestado.InseridaPor = list.inserida_por;

        //        //        listPessoaAtestado.Add(pessoaatestado);
        //        //    }
        //        //}
        //        //else
        //        //{
        //        //    var consultaAtestados = from pessoaatestado in _context.tab_pessoa_atestado
        //        //                            join pessoaatestadoCAT in _context.tab_pessoa_atestado_cat on pessoaatestado.id_atestado equals pessoaatestadoCAT.tab_pessoa_atestado1.id_atestado
        //        //                            where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                            && pessoaatestado.id_atestado == pIdAtestado
        //        //                            select pessoaatestadoCAT.tab_pessoa_atestado;

        //        //    var consulta = from pessoaatestado in (pAtestadosExistentes) ? _context.tab_pessoa_atestado.Where((BuildContainsExpression<tab_pessoa_atestado, tab_pessoa_atestado>(item => item, consultaAtestados))) : _context.tab_pessoa_atestado.Except(consultaAtestados)
        //        //                   where pessoaatestado.tab_pessoa.Id_pessoa == pIdPessoa
        //        //                   && pessoaatestado.tab_tipo_atestado.id_tipo_atestado == 15
        //        //                   select new
        //        //                   {
        //        //                       pessoaatestado.id_atestado,
        //        //                       pessoaatestado.tab_pessoa_CID10.id_cid,
        //        //                       pessoaatestado.tab_tipo_atestado.id_tipo_atestado,
        //        //                       pessoaatestado.tab_tipo_afastamento.id_tipo_afastamento,
        //        //                       pessoaatestado.dt_emissao,
        //        //                       pessoaatestado.dt_acidente,
        //        //                       pessoaatestado.periodo_inicial,
        //        //                       pessoaatestado.periodo_final,
        //        //                       pessoaatestado.local,
        //        //                       pessoaatestado.tab_pessoa.Id_pessoa,
        //        //                       pessoaatestado.path,
        //        //                       pessoaatestado.obs,
        //        //                       pessoaatestado.inserida_por
        //        //                   };

        //        //    var listConsulta = consulta.ToList();

        //        //    foreach (var list in listConsulta)
        //        //    {
        //        //        PessoaAtestado pessoaatestado = new PessoaAtestado();
        //        //        pessoaatestado.IdAtestado = list.id_atestado;
        //        //        pessoaatestado.PessoaCID10 = new PessoaCID10(list.id_cid);
        //        //        pessoaatestado.TipoAtestado = new TipoAtestado(list.id_tipo_atestado);
        //        //        pessoaatestado.TipoAfastamento = new TipoAfastamento(list.id_tipo_afastamento);
        //        //        pessoaatestado.DtEmissao = list.dt_emissao;
        //        //        pessoaatestado.DtAcidente = list.dt_acidente;
        //        //        pessoaatestado.PeriodoInicial = list.periodo_inicial;
        //        //        pessoaatestado.PeriodoFinal = list.periodo_final;
        //        //        pessoaatestado.Local = list.local;
        //        //        pessoaatestado.Pessoa = new Pessoa(list.Id_pessoa);
        //        //        pessoaatestado.Path = list.path;
        //        //        pessoaatestado.Obs = list.obs;
        //        //        pessoaatestado.InseridaPor = list.inserida_por;

        //        //        listPessoaAtestado.Add(pessoaatestado);
        //        //    }
        //        //}

        //        return listPessoaAtestado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //private bool VerificarCamposCadastro()
        //{
        //    bool _verificar = false;
          
        //    if (this._tipoAtestado == null)
        //        throw new Exception("É necessário preencher o tipo de atestado!");

        //    if (this._tipoAtestado.IdTipoAtestado == 0)
        //        throw new Exception("É necessário preencher o tipo de atestado!");

        //    if (this._tipoAtestado.IdTipoAtestado != 15)
        //    {
        //        if (this._tipoAfastamento == null)
        //            throw new Exception("É necessário preencher o tipo de afastamento!");

        //        if (this._tipoAfastamento.IdTipoAfastamento == 0)
        //            throw new Exception("É necessário preencher o tipo de afastamento!");

        //        DateTime _checkData;
        //        if (!DateTime.TryParse(this._periodoInicial.ToString(), out _checkData))
        //            throw new Exception("É necessário preencher o período inicial!");

        //        if (_checkData.Year == 1)
        //            throw new Exception("É necessário preencher o período inicial!");

        //        if (!DateTime.TryParse(this._periodoFinal.ToString(), out _checkData))
        //            throw new Exception("É necessário preencher o período final!");

        //        if (_checkData.Year == 1)
        //            throw new Exception("É necessário preencher o período final!");

        //        if (this._pessoa == null)
        //            throw new Exception("É necessário preencher a pessoa!");

        //        if (this._pessoa.IdPessoa == 0)
        //            throw new Exception("É necessário preencher a pessoa!");

        //        if (this._obs == string.Empty)
        //            throw new Exception("É necessário preencher o comentário!");
        //    }
        //    else
        //    {
        //        if (this._tipoAfastamento == null)
        //            throw new Exception("É necessário preencher o tipo de afastamento!");

        //        if (this._tipoAfastamento.IdTipoAfastamento == 0)
        //            throw new Exception("É necessário preencher o tipo de afastamento!");

        //        DateTime _checkData;
        //        if (!DateTime.TryParse(this._dtEmissao.ToString(), out _checkData))
        //            throw new Exception("É necessário preencher a data de emissão!");

        //        if (_checkData.Year == 1)
        //            throw new Exception("É necessário preencher a data de emissão!");

        //        if (!DateTime.TryParse(this._dtAcidente.ToString(), out _checkData))
        //            throw new Exception("É necessário preencher a data de acidente!");

        //        if (_checkData.Year == 1)
        //            throw new Exception("É necessário preencher a data de acidente!");

        //        if (!DateTime.TryParse(this._periodoInicial.ToString(), out _checkData))
        //            throw new Exception("É necessário preencher o período inicial de afastamento!");

        //        if (_checkData.Year == 1)
        //            throw new Exception("É necessário preencher o período inicial de afastamento!");

        //        if (!DateTime.TryParse(this._periodoFinal.ToString(), out _checkData))
        //            throw new Exception("É necessário preencher o período final de afastamento!");

        //        if (_checkData.Year == 1)
        //            throw new Exception("É necessário preencher o período final de afastamento!");

        //        if (this._local == string.Empty)
        //            throw new Exception("É necessário preencher o local!");

        //        if (this._inseridaPor == string.Empty)
        //            throw new Exception("É necessário preencher o campo inserida Por!");

        //        if (this._pessoa == null)
        //            throw new Exception("É necessário preencher a pessoa!");

        //        if (this._pessoa.IdPessoa == 0)
        //            throw new Exception("É necessário preencher a pessoa!");
        //    }

        //    _verificar = true;
        //    return _verificar;
        //}

        //public void Salvar()
        //{

        //    try
        //    {
        //        if (VerificarCamposCadastro())
        //        {
        //            if (this._idAtestado == 0)
        //            {
        //                tab_pessoa_atestado tabPessoaAtestado = new tab_pessoa_atestado();

        //                tabPessoaAtestado.dt_emissao = this._dtEmissao;
        //                tabPessoaAtestado.dt_acidente = this._dtAcidente;
        //                tabPessoaAtestado.periodo_inicial = this._periodoInicial;
        //                tabPessoaAtestado.periodo_final = this._periodoFinal;
        //                tabPessoaAtestado.local = this._local;
        //                tabPessoaAtestado.path = this._path;
        //                tabPessoaAtestado.obs = this._obs;
        //                tabPessoaAtestado.inserida_por = this._inseridaPor;

        //                //if (this._pessoaCID10 != null)
        //                //    tabPessoaAtestado.tab_pessoa_CID10Reference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa_CID10", "id_cid", this._pessoaCID10.IdCid);
        //                //else
        //                //    tabPessoaAtestado.tab_pessoa_CID10Reference.EntityKey = null;

        //                if (this._tipoAtestado != null)
        //                    tabPessoaAtestado.tab_tipo_atestadoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_atestado", "id_tipo_atestado", this._tipoAtestado.IdTipoAtestado);
        //                else
        //                    tabPessoaAtestado.tab_tipo_atestadoReference.EntityKey = null;

        //                if (this._tipoAfastamento != null)
        //                    tabPessoaAtestado.tab_tipo_afastamentoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_afastamento", "id_tipo_afastamento", this._tipoAfastamento.IdTipoAfastamento);
        //                else
        //                    tabPessoaAtestado.tab_tipo_atestadoReference.EntityKey = null;

        //                if (this._pessoa != null)
        //                    tabPessoaAtestado.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoa.IdPessoa);
        //                else
        //                    tabPessoaAtestado.tab_pessoaReference.EntityKey = null;

        //                _context.AddTotab_pessoa_atestado(tabPessoaAtestado);
        //                _context.SaveChanges();
        //            }
        //            else
        //            {
        //                tab_pessoa_atestado tabPessoaAtestado = (from tabpessoaatestado in _context.tab_pessoa_atestado
        //                                                         where tabpessoaatestado.id_atestado == this._idAtestado
        //                                                         select tabpessoaatestado).First();

        //                tabPessoaAtestado.dt_emissao = this._dtEmissao;
        //                tabPessoaAtestado.dt_acidente = this._dtAcidente;
        //                tabPessoaAtestado.periodo_inicial = this._periodoInicial;
        //                tabPessoaAtestado.periodo_final = this._periodoFinal;
        //                tabPessoaAtestado.local = this._local;
        //                tabPessoaAtestado.path = this._path;
        //                tabPessoaAtestado.obs = this._obs;
        //                tabPessoaAtestado.inserida_por = this._inseridaPor;

        //                //if (this._pessoaCID10 != null)
        //                //    tabPessoaAtestado.tab_pessoa_CID10Reference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa_CID10", "id_cid", this._pessoaCID10.IdCid);
        //                //else
        //                //    tabPessoaAtestado.tab_pessoa_CID10Reference.EntityKey = null;

        //                if (this._tipoAtestado != null)
        //                    tabPessoaAtestado.tab_tipo_atestadoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_atestado", "id_tipo_atestado", this._tipoAtestado.IdTipoAtestado);
        //                else
        //                    tabPessoaAtestado.tab_tipo_atestadoReference.EntityKey = null;

        //                if (this._tipoAfastamento != null)
        //                    tabPessoaAtestado.tab_tipo_afastamentoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_afastamento", "id_tipo_afastamento", this._tipoAfastamento.IdTipoAfastamento);
        //                else
        //                    tabPessoaAtestado.tab_tipo_atestadoReference.EntityKey = null;

        //                if (this._pessoa != null)
        //                    tabPessoaAtestado.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoa.IdPessoa);
        //                else
        //                    tabPessoaAtestado.tab_pessoaReference.EntityKey = null;

        //                _context.SaveChanges();
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        //public void Excluir()
        //{
        //    using (TransactionScope scope = new TransactionScope())
        //    {
        //        try
        //        {
        //            //// vínculo de atestados com CAT
        //            //var consultaAtestadoCAT = from pessoaatestadoCAT in _context.tab_pessoa_atestado_cat
        //            //                          where pessoaatestadoCAT.tab_pessoa_atestado.id_atestado == this._idAtestado
        //            //                          select pessoaatestadoCAT;

        //            //var listConsultaAtestadoCAT = consultaAtestadoCAT.ToList();
        //            //foreach (var list in listConsultaAtestadoCAT)
        //            //{
        //            //    _context.DeleteObject(list);
        //            //    _context.SaveChanges();
        //            //}

        //            //// vínculo de atestados
        //            //var consultaAtestado = from pessoaatestadoCAT in _context.tab_pessoa_atestado_cat
        //            //                       where pessoaatestadoCAT.tab_pessoa_atestado1.id_atestado == this._idAtestado
        //            //                       select pessoaatestadoCAT;

        //            //var listConsultaAtestado = consultaAtestado.ToList();
        //            //foreach (var list in listConsultaAtestado)
        //            //{
        //            //    _context.DeleteObject(list);
        //            //    _context.SaveChanges();
        //            //}

        //            //// atestado
        //            //var consulta = from pessoaatestado in _context.tab_pessoa_atestado
        //            //               where pessoaatestado.id_atestado == this._idAtestado
        //            //               select pessoaatestado;

        //            //var listConsulta = consulta.ToList();

        //            //string _caminhodoc = "";
        //            //foreach (var list in listConsulta)
        //            //{
        //            //    _caminhodoc = list.path;
        //            //    _context.DeleteObject(list);
        //            //    _context.SaveChanges();

        //            //    if ((_caminhodoc != "") && (System.IO.File.Exists(_caminhodoc)))
        //            //        System.IO.File.Delete(_caminhodoc);
        //            //}
        //        }
        //        catch (Exception ex)
        //        {
        //            throw ex;
        //        }

        //        scope.Complete();
        //    }
        //}
        //#endregion
    }
}
